#!/usr/bin/env python
# coding:utf-8
from PoboAPI import *
import datetime
import numpy as np
#用真格量化 python实现，在真格量化上运行，如果有问题 可加群 726895887 咨询
#真格量化可访问 https://quant.pobo.net.cn
#开始时间，用于初始化一些参数
def OnStart(context) :
    print("I\'m starting...")
    #登录交易账号，需在主页用户管理中设置账号，并把期货测试替换成您的账户名称
    context.myacc = None
    if "回测期货" in context.accounts :
        print("登录交易账号[回测期货]")
        if context.accounts["回测期货"].Login() :
            context.myacc = context.accounts["回测期货"]

def OnMarketQuotationInitialEx(context, exchange,daynight):
    if exchange != 'SHFE':
        return
    #获取主力合约
    g.code = GetMainContract('SHFE', 'rb',20)
    #订阅K线数据，用于驱动OnBar事件
    SubscribeBar(g.code, BarType.Day)
    
    g.exchangelist=["DCE","SHFE","INE","CZCE","CFFEX"]#关注交易所列表
    #g.blacklist=['Oc', 'Om', 'S','Ocu', 'Oru','USD_sc','OCF','OSR',"ME","AF","WR","bb","fb","T","TF","TS","TC"]#"IF","IC","IH","PM","sc","AP","j","RS","ZC","bu","CY"]
    g.blacklist=['Oc', 'Om', 'S','Ocu', 'Oru','USD_sc','OCF','OSR',"ER","GN","ME","RO","TC","WS"]#"IF","IC","IH","PM","sc","AP","j","RS","ZC","bu","CY"]
    #g.favorlist=["TA","jm","i","al","ni","fu","rb"]#["ni","SF","v","ru","SR","cu","p","ag","pp"]
    
    for exchange in g.exchangelist:

        productlist=GetVarieties(exchange)

        #print str(productlist)

        for product in productlist:

            if product not in g.blacklist :

                #print "product is "+str(product)
                
                
                try:

                    contractname=GetMainContract(exchange, product,20)
                    #print "contractname is "+str(contractname)
                    OpenMargin = CalcOpenMargin(context.myacc,contractname,volume = 1,direction='buy',price='highlimit')

                    print(str(contractname)+"  "+str(OpenMargin))
                except:
                    
                    print("no data")
                        
                    
                    
    
#实时行情事件，当有新行情出现时调用该事件Ex
def OnBar(context,code,bartype):
    #过滤掉不需要的行情通知
    if code != g.code:
        return
    dyndata = GetQuote(g.code)
    #计算均线
    MA = GetIndicator("MA",code,params=(5,10),bar_type = BarType.Day)
    MA1 = MA["MA(5)"]
    MA2 = MA["MA(10)"]
    if len(MA2)<2:
        return
    #ma1上穿ma2时买入螺纹主力1手
    elif MA1[-1] >= MA2[-1] and MA1[-2]<MA2[-2]:
        QuickInsertOrder(context.myacc,g.code,'buy','open',dyndata.now,10)
    #ma1下穿ma2时卖出平仓
    elif MA1[-1] <= MA2[-1] and MA1[-2]>MA2[-2]:
        QuickInsertOrder(context.myacc,g.code,'sell','close',dyndata.now,10)
        
